/**
 * 缓存管理器
 */
class CacheManager {
    constructor(namespace = 'record') {
        this.namespace = namespace;
    }

    /**
     * 生成带命名空间的key
     * @param {string} key 缓存key
     * @returns {string} 带命名空间的key
     */
    _getKey(key) {
        return this.namespace ? `${this.namespace}:${key}` : key;
    }

    /**
     * 设置缓存
     * @param {string} key 缓存key
     * @param {any} value 缓存值
     */
    set(key, value) {
        uni.setStorageSync(this._getKey(key), value);
    }

    /**
     * 获取缓存
     * @param {string} key 缓存key
     * @param {any} defaultValue 默认值
     * @returns {any} 缓存值
     */
    get(key, defaultValue = null) {
        const data = uni.getStorageSync(this._getKey(key));
        if (!data) return defaultValue;

        try {
            return data;
        } catch (e) {
            return defaultValue;
        }
    }

    /**
     * 删除缓存
     * @param {string} key 缓存key
     */
    remove(key) {
        uni.removeStorageSync(this._getKey(key));
    }

    /**
     * 清空当前命名空间下的所有缓存
     */
    clear() {
        const storage = uni.getStorageInfoSync();
        const keys = storage.keys;
        const prefix = this.namespace ? `${this.namespace}:` : '';

        keys.forEach((key) => {
            if (!prefix || key.startsWith(prefix)) {
                uni.removeStorageSync(key);
            }
        });
    }
}

export default  new CacheManager();
